/*1.将实践练习2中的第1题利用函数的思想进行修改。要求函数参数中包含数组名。*/
/*1．学生成绩统计（一维数组）
从键盘输入一个班（全班最多不超过30人）学生某门课的成绩，当输入成绩为负值时，输入结束，分别实现下列功能：
（1）统计不及格人数并打印不及格学生名单；
（2）统计成绩在全班平均分及平均分之上的学生人数，并打印这些学生的名单；
（3）以直方图方式统计各分数段的学生人数及所占的百分比。形式如下：
分数段  学生人数      图形
<60   3（10%）	***
60-69  8（…）	********
70-79	 7（…）	*******
80-89	 8（…）	********
>=90	 4（…）	****
*/
//计科1班  庄洵妍   140201011041


#include <stdio.h>

void input(float score[], char name[][10], int N)  //定义input函数。浮点数的变量score，可以容纳四十个浮点数。注意name是字符数组，要用char，，不可以用int
{
    int i;
	for (i = 0; i<N; i++){                            //用for循环对学生名字和成绩的输入
		printf("请输入第%d位学生姓名", i + 1); 
		scanf("%s", &name[i]);
		printf("请输入分数:");
		scanf("%f", &score[i]);
		if (score[i]<0) break;                     //这里得先断开，不然就把负数加进去了
		//		ave = ave + score[i];              //这个平均值要在output中算，不然output根本调用不到这个值
	}
}
void output(float score[], char name[][10], int N)   //定义一个output函数，浮点数的变量score
{
	int i, j = 0, k = 0, b = 0, c = 0, d = 0, e = 0, f = 0, g = 0;  //分别表示各个分数段的人数
	float ave, sum = 0;
	for (i = 0; i<N; i++)                         
	{
		sum = sum + score[i];        
	}
	ave = (float)(sum / N);      
	printf("成绩不及格的学生有\n");
	for (i = 0; i<N; i++){                          //这里不知道N是多少，赋值是在input中赋的，函数的形参是不能互用的，所以放在main中赋值了
		if (score[i]>0 && score[i]<60){
			printf("  %s  ", name[i]);
		}
	}
	printf("\n");

	printf("成绩及格的学生姓名及人数\n");           //j是及格的人数
	for (i = 0; i<N; i++){
		if (score[i] >= 60){
			printf("  %s  ", name[i]);
			j++;
		}
	}
	printf("\n");
	printf("人数为%d\n", j);

	printf("平均分以上的学生姓名及人数\n");          //b是分数在平均分以上的人数
	for (i = 0; i<N; i++){
		if (score[i] >= ave){
			printf("  %s  ", name[i]);
			b++;
		}
	}
	printf("\n");
	printf("人数为%d\n", b);                         //c是不及格人数

	//下面是对学生分数段的人数的统计
	for (i = 0; i<N; i++){
		if (score[i]<60){
			c++;
		}
	}
	for (i = 0; i<N; i++){
		if (score[i] >= 60 && score[i]<69){          //d是60到69的人数
			d++;
		}
	}
	for (i = 0; i<N; i++){
		if (score[i] >= 70 && score[i]<79){           //e是70到79的人数
			e++;
		}
	}
	for (i = 0; i<N; i++){
		if (score[i] >= 80 && score[i]<89){           //f是80到89的人数
			f++;
		}
	}
	for (i = 0; i<N; i++){
		if (score[i] >= 90){                          //g是90以上的人数
			g++;
		}
	}

	//输出分数段的图形
	printf("分数段    学生人数	图形\n");
	printf("<60        %d            ", c);
	for (i = 0; i<c; i++){
		printf("*");
	}
	printf("\n");
	printf("60-69      %d	        ", d);
	for (i = 0; i<d; i++){
		printf("*");
	}
	printf("\n");
	printf("70-79      %d            ", e);
	for (i = 0; i<e; i++){
		printf("*");
	}
	printf("\n");
	printf("80-89	   %d  	        ", f);
	for (i = 0; i<f; i++){
		printf("*");
	}
	printf("\n");
	printf(">=90       %d            ", g);
	for (i = 0; i<g; i++){
		printf("*");
	}
	printf("\n");
}
int main(){
	int N;                    //定义学生人数
	float score[40];          //定义一个类型为浮点数的变量score。可以容纳四十个浮点数。0-39
	char name[30][10];        //char类型的数组 30个字符元素。。
	printf("请输入学生人数：");
	scanf("%d", &N);
	input(score, name, N);    //调用input，output函数 。name是字符数组,还要定义一个变量N。
	output(score, name, N);      
	return 0;
}


